字节阿里等大厂校招高频面试:数据清洗过程
最近在辅导投递实习同学的过程中发现,他们经常被问到数据清洗相关的内容,例如什么是数据清洗?你的项目中清洗了哪些数据?如何清洗的?为什么你要这样清洗等系列问题?
一、什么是数据清洗?
“数据清洗(data cleaning)是从记录集、数据库表或数据库中检测和纠正(或删除)损坏或不准确的记录的过程,是指识别数据的不完整、不正确、不准确或不相关部分,然后替换、修改、或删除脏数据或粗数据。”以上是维基百科对于“数据清洗”的定义。简单理解数据清洗就是把“脏”数据替换成符合要求的高质量可用数据的过程。
从数据清洗的概念来看,数据清洗主要解决两类问题:数据质量问题、数据易用性问题。在数仓建设过程中,经常会从不同的源接入数据,而这些数据的质量是不确定的,我们在接入ODS层时,需要进行初步的数据清洗,保证数据质量、提高数据易用性,在一定程度上降低后续开发复杂度。
针对不同的数据清洗目的通常采用不同的清洗方法。
数据完整性:针对缺省值的处理,在接入埋点数据时经常会出现字段缺失的情况,针对这种问题我们的处理方式一般有两种 :
补全:通过其他字段或前后文进行数据补齐,比如对于个人信息,如果有部分缺失可以考虑是否可以利用身份证号等信息进行推算填充。
剔除:对于无法补全的数据,进行剔除。
这里还可以根据具体字段的重要程度及缺失比例,采取不同的处理方法。比如对于一些不重要的但是缺失率非常高的字段,可以考虑是否直接去除对应字段,对于一些非常重要但缺失率很高的字段,可以与对应的业务人员进行了解,看是否可以通过其他渠道获取数据。
数据唯一性:主要针对重复记录的处理,一般通过去重可以解决。去重的方式可以是根据主键去重(同一来源的数据有重复)或根据规则去重(不同来源的数据有重复,主要通过设置一些规则判断是否是重复数据并进行去重)
数据权威性:多个数据源出现数据不一致时的采信问题。如果同一类数据可以从多个渠道获取,如果出现数据不一致情况时应该取用那一条记录的问题。针对这种情况可以通过对不同数据源设置权威级别在帮助我们在清洗时进行决策。
数据合法性:主要解决内容合法性、类型合法性等问题,通常采用设置规则的方式进行处理。如:年龄不能超过120、出生日期不能晚于当天等。
数据一致性:解决不同数据源相同含义的指标或同一指标含义不同的问题。针对这种问题通常采用建立元数据体系来解决。
在清洗数据的过程中尽可能的提高数据易用性,为下游任务的开发减少不确定性和复杂度。提高易用性常见的方式有:字段格式统一、字段名称统一、复杂字段解析等
字段格式与名称统一:对于不同数据源、不同表同一含义字段,进行格式的统一及名称的统一,在下游使用时可以明确对应字段的含义,尽可能的避免字段类型的转换。
复杂字段解析:数据源中经常包含一些复杂结构的字段,如Json等,对于复杂字段中的常用key进行解析存储为表中的一个字段,在下游使用时,不需要每次进行解析操作。而原有的json字段也需要保留,保证在其他key也有使用需求时,可以通过json解析获取。
在业务库中经常使用“yyyy-MM-dd HH:mm:ss”的格式来进行日期类型数据的存储,在数仓中我们经常使用”yyyyMMdd“格式,因此需要进行日期格式的转换。这种转换通常也比较简单,使用日期转换函数即可完成。
在业务库中会使用json结构来存储一些附加信息,而这些附加信息在数仓分析中会经常被用到,因此需要将这些数据解析出来存为单独的字段。
埋点数据经常会出现字段值缺失的情况,可以在数据清洗阶段通过相关维表进行填充。其他比如
涤生大数据校招往期精彩推荐